package uabc.ia.agentelimpieza.agente;

import uabc.ia.agentelimpieza.ambiente.Ambiente;
import uabc.ia.agentelimpieza.constantes.Direccion;
import uabc.ia.agentelimpieza.entidades.Accion;
import uabc.ia.agentelimpieza.entidades.Estado;
import uabc.ia.agentelimpieza.entidades.Percepcion;

public class Aspiradora {

	public Percepcion obtenerPercepcion(Ambiente estado){
		return new Percepcion(estado.getLocacionActual(),estado.getDireccion(),estado.getLocacionActual().isSuciedad());
	}
	
	public void realizarAccion(Accion accion, Ambiente ambiente){
		if(accion.getAccion().equals("go(home)"))
				goHome(accion, ambiente);
		else
			if(accion.getAccion().equals("go(forward)"))
				goForward(accion, ambiente);
			else
				if(accion.getAccion().equals("turn(right)"))
					turnRight(accion, ambiente);
				else
					if(accion.getAccion().equals("turn(left)"))
						turnLeft(accion, ambiente);
					else
						if(accion.getAccion().equals("do(suck)"))
							doSuck(accion, ambiente);
						else
							doStop(accion, ambiente);
	}
	
	public void limpiar(int x, int y){
		//ambiente.actualizarCelda(x, y,"-");
	}
	
	public void goHome(Accion accion, Ambiente ambiente){
		ambiente.goHome();
	}
	
	public void goForward(Accion accion, Ambiente ambiente){
		if(ambiente.getDireccion() == Direccion.east)
			ambiente.setLocacionActual(ambiente.getCeldas()[ambiente.getLocacionActual().getX()+1][ambiente.getLocacionActual().getY()]);
			//ambiente.getLocacionActual().setX(ambiente.getLocacionActual().getX() + 1);
		else
			if(ambiente.getDireccion() == Direccion.south)
				ambiente.setLocacionActual(ambiente.getCeldas()[ambiente.getLocacionActual().getX()][ambiente.getLocacionActual().getY()+1]);
				//ambiente.getLocacionActual().setY(ambiente.getLocacionActual().getY() + 1);
			else
				if(ambiente.getDireccion() == Direccion.west)
					ambiente.setLocacionActual(ambiente.getCeldas()[ambiente.getLocacionActual().getX()-1][ambiente.getLocacionActual().getY()]);
					//ambiente.getLocacionActual().setX(ambiente.getLocacionActual().getX() - 1);
				else
					ambiente.setLocacionActual(ambiente.getCeldas()[ambiente.getLocacionActual().getX()][ambiente.getLocacionActual().getY()-1]);
					//ambiente.getLocacionActual().setY(ambiente.getLocacionActual().getY() - 1);
	}
	
	
	public void turnLeft(Accion accion, Ambiente ambiente){
		if(ambiente.getDireccion() == Direccion.east)
			ambiente.setDireccion(Direccion.north);
		else
			if(ambiente.getDireccion() == Direccion.south)
				ambiente.setDireccion(Direccion.east);
			else
				if(ambiente.getDireccion() == Direccion.west)
					ambiente.setDireccion(Direccion.south);
				else
					ambiente.setDireccion(Direccion.west);
	}
	
	public void turnRight(Accion accion, Ambiente ambiente){
		if(ambiente.getDireccion() == Direccion.east)
			ambiente.setDireccion(Direccion.south);
		else
			if(ambiente.getDireccion() == Direccion.south)
				ambiente.setDireccion(Direccion.west);
			else
				if(ambiente.getDireccion() == Direccion.west)
					ambiente.setDireccion(Direccion.north);
				else
					ambiente.setDireccion(Direccion.east);
	}
	
	public void doSuck(Accion accion, Ambiente ambiente){
		ambiente.limpiarCelda();
	}
	
	public void doStop(Accion accion, Ambiente ambiente){
		ambiente.setDireccion(Direccion.east);
		ambiente.setLimpio(true);
	}
}
